<?php
/**
 * Created by PhpStorm.
 * User: A0101000488
 * Date: 2018/9/20
 * Time: 14:39
 */

namespace App\Http\Controllers;


use App\Http\Models\Student;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Session;

class StudentController extends Controller {


    public function index($id = 0) {
        $students = Student::index($id);
        echo "<pre/>";
        print_r($students);
        exit;
        return view('student/index');
    }

    //http://la.com/add
    public function add() {
        $res = Student::add();
        var_dump($res);
    }

    //http://la.com/update
    public function update() {
        $res = Student::update1();
        var_dump($res);
    }

    //http://la.com/del
    public function del() {
        $res = Student::del();
        var_dump($res);
    }

    //http://la.com/query
    public function query() {
        $res = Student::query();
        dd($res);
    }

    //http://la.com/groupFunc
    public function groupFunc() {
        $res = Student::groupFunc();
        var_dump($res);
    }

    //http://la.com/orm
    public function orm() {
        //查询所有记录
        $res = Student::all();
        //指定主键查询
        $res = Student::find(1);
        //指定主键查询，没找到则抛出异常
        $res = Student::findOrFail(100);

        //查询构造器的使用
        $res = Student::get();
        $res = Student::where('id', '>', '2')
            ->first();

        echo "<pre/>";
        $res = Student::where('id', '>', '5')
            ->chunk(2, function ($val) {
                print_r($val);
            });
        //聚合函数
        $res = Student::count();
        $res = Student::where('id', '>', '4')
            ->max('age');
        var_dump($res);
    }

    /**
     * 描述 : Eloquent ORM新增数据，自定义时间戳，以及批量赋值
     * 参数 :
     * 返回 :
     * 作者 : gxh
     */
    public function orm2() {
        //使用模型save新增数据
        $studentModel              = new Student();
        $studentModel->name        = 'gongxiaohua';
        $studentModel->age         = 81;
        $studentModel->sex         = 0;
        $studentModel->create_time = NOW();
        $studentModel->update_time = NOW();
        $res                       = $studentModel->save();
        $res                       = Student::find(10);

        //使用create方法新增数据
        $res = Student::create(
            [
                'name'        => 'zhuwenxing',
                'age'         => '100',
                'sex'         => 1,
                'create_time' => NOW(),
            ]
        );

        //以属性查找用户 无则新增 并返回新的实例
        $res = Student::firstOrCreate(
            [
                'name' => 'zhuwenxing1',
                /*'age'         => '100',
                'sex'         => 1,
                'create_time' => NOW(),*/
            ]
        );

        //以属性查找用户 无则new新的实例新增
        $res = Student::firstOrNew(
            [
                'name' => 'zhuwenxing11',
                /*'age'         => '100',
                'sex'         => 1,
                'create_time' => NOW(),*/
            ]
        );
        //若想新增
        $bool = $res->save();
        dd($res);
    }

    /**
     * 描述 : 使用Eloquent ORM修改数据
     * 作者 : gxh
     */
    public function ormUpdate() {
        /*//1.通过模型更新
        $student              = Student::find(13);
        $student->name        = 'niumowang';
        $student->age         = 7;
        $student->update_time = NOW();
        $res                  = $student->save();

        //2.结合查询语句，批量更新
        $res = Student::where('id', '>', '6')
            ->update(['update_time' => NOW()]);*/

        //1.通过模型删除
        $student = Student::find(12);
        $res     = $student->delete();

        //2.通过主键值删除
        $res = Student::destroy(12);
        $res = Student::destroy([12, 13]);
        //3.根据指定条件删除
        $res = Student::where('id', '>', 12)->delete();
    }

    /**
     * 描述 :
     * 参数 :
     * 返回 :
     * 作者 : gxh
     * Blade模板引擎简介及模板继承的使用
     * 基础语法及include的使用
     * 流程控制
     * 模板中的url
     */
    public function blade() {
        $names = ['gongxiaohua', 'gxh'];
        //$students = Student::get();
        $students = [];
        return view('student.index',
            [
                'name'     => 'gongxiaohua',
                'names'    => $names,
                'students' => $students,
            ]);
    }

    /**
     * 描述 : url跳转
     * 作者 : gxh
     * @return int
     */
    public function routeTest() {
        //$msg = Session::get('message', 'default');
        return 'route-test--' . $msg;
    }

    /**
     * 描述 : request
     * 作者 : gxh
     * @param Request $request
     */
    public function request1(Request $request) {
        //1.取值
        $request->input('name', 'gxh');
        //判断是否有参数
        $request->has('name');
        //取request中的所有值
        $request->all();

        //2.判断请求类型
        $request->method();
        //判断是否为指定请求类型
        $request->isMethod('GET');
        //判断是否为ajax请求
        $request->ajax();
        //判断是否为某个控制器下的方法
        $request->is('student/*');
        //获取当前请求的url
        $request->url();
    }

    /**
     * 描述 : session
     * 作者 : gxh
     * @param Request $request
     */
    public function session(Request $request) {
        $msg = Session::get('message', 'default');
        return 'route-test--' . $msg;
        //1.http request类的session方法
        $request->session()->put('name', 'gongxiaohua');
        $name = $request->session()->get('name');
        //2.session()辅助函数
        session()->put('age', '100');
        $age = session()->get('age');
        //3.session façade
        //Session::put('gender', 'female');
        Session::put(['gender' => '1', 'name' => 'dara']);
        $gender = Session::get('gender', 'default');
        echo $gender;
        $name = Session::get('name', 'default');
        echo $name;
        //一个key绑定数组
        Session::push('student', 'gongxiaohua');
        Session::push('student', 'gxhdara');
        print_r(Session::get('student'));
        exit;
        //取出后删除
        $res = Session::pull('student', 'default');
        //取出session中所有的值
        $res = Session::all();
        dd($res);
        //判断session某个key是否存在
        $res = Session::has('name');
        dd($res);
        //删除指定key的值
        $all = Session::all();
        print_r($all);
        Session::forget('name');
        $all2 = Session::all();
        print_r($all2);
        //删除所有session
        Session::flush();
        $all2 = Session::all();
        print_r($all2);
        //暂存 第一次访问才存在
        Session::flash('first', 'csv');

    }

    /**
     * 描述 : response
     * 作者 : gxh
     * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
     */
    public function response() {
        $result = [
            'errCode' => 0,
            'errMsg'  => 0,
            'data'    => [],
        ];
        //响应json
        return response()->json($result);
        //重定向
        return redirect('route-test');
        return redirect('session')->with('message', 'I\'m message');
        return redirect()->action('StudentController@session')
            ->with('message', 'I\'m message222');
        return redirect()->route('session')
            ->with('message', 'I\'m message333');
        //返回上一级
        return redirect()->back();
    }

    /**
     * 描述 : 对应活动宣传页面
     * 作者 : gxh
     */
    public function activity() {
        return 'waiting for activity';
    }

    /**
     * 描述 : 对应活动进行页面
     * 作者 : gxh
     */
    public function activity1() {
        return 'activiting   1111...';
    }

    /**
     * 描述 : 对应活动进行页面
     * 作者 : gxh
     */
    public function activity2() {
        return 'activiting   2222...';
    }

    public function redis() {
        echo "<pre/>";
        //连接本地的 Redis 服务
        $redis = new \Redis();
        $redis->connect('127.0.0.1', 6379);
        echo "Connection to server sucessfully<br/>";
        $redis->auth(123456);
        /*设置 redis 字符串数据*/
        //$redis->set("tutorial-name", "Redis tutorial");
        // 获取存储的数据并输出
        echo "Stored string in redis:: " . $redis->get("tutorial-name") . "<br/>";

        /*hash*/
        //$redis->hSet("hash1", "key1", 'value5');
        //$redis->hSet("hash1", "key2", 'value2');
        //获取指定hashkey的值
        $hash = $redis->hGet("hash2", 'key1');
        //获取多个hashkey的值
        $hash = $redis->hMGet("hash1", ['key1']);
        //删除指定hashkey的值
        $hash = $redis->hDel("hash1", 'key3','key4');
        //获取hash数据的长度
        $hash = $redis->hLen("hash1");
        //获取指定key的所有值
        $hash = $redis->hGetAll("hash1");
        //print_r($hash);
        echo "<br/>";

        /*list*/
        //从左边插入  不能直接插入数组  须将数据转换为json字符串
        $redis->lPush('list1', json_encode(['name' => 'gxh']));
        $redis->lPush('list1', json_encode(['name' => '456456','age' => '100']));
        //获取list长度
        $list = $redis->lLen('list1');
        //获取list1中key为0-10的值
        $list = $redis->lRange('list1',0,10);
        //先进先出
        $list = $redis->rPop('list1');
        //print_r($list);

        $redis->sAdd('set1', 'a');
        $redis->sAdd('set1', 'b');
        $redis->sAdd('set1', 'c');
        $redis->sAdd('set1', 'c');
        $set = $redis->sCard('set1');//3
        $sets = $redis->sMembers('set1');//arr

        $redis->zAdd('zset1', 10.9, 'xiaohua');
        $redis->zAdd('zset1', 12.6, 'zhangsan');
        $redis->zAdd('zset1', 15.7, 'lisi');
        //asc
        $zsort = $redis->zRange('zset1', 0,-1);
        print_r($zsort);
        //desc
        $zsort = $redis->zRevRange('zset1', 0,-1);
        print_r($zsort);

    }
}